/*
Date:20210529 18:56PM
key:寻找起点，从起点开始判断，两个子函数
 */
class Solution {
public:
    //B空直接是子结构,B不空A空直接返回0，都不空且A=B，return 左情况&右情况 
    bool check(TreeNode* A, TreeNode* B)
    {
        
        if(B==NULL){return 1;}
        else
        {
            if(A==NULL){return 0;}
            else
            {
                if(A->val==B->val)
                {
                    return (check(A->left, B->left)&&check(A->right, B->right));
                }
                else{return 0;}
            }
        }
    }
    //遍历A，寻找相同的起点，当前不行就往左和往右找,A如果找到叶子节点都没有那就肯定没有了。以某个A为起点的若是符合子结构就返回1
    bool first(TreeNode* A, TreeNode* B)
    {
        if(A!=NULL)
        {
            if(A->val==B->val&&(check(A, B)))
            {
                return 1;  
            }
            return first(A->left,B)||first(A->right,B);
            
        }
        return 0;
    }
    //必须特判B为空的情况
    bool isSubStructure(TreeNode* A, TreeNode* B) 
    {
        if(B==NULL){return 0;}
        return first(A,B);
    }
};